package com.cskaoyan.javase.oop2._1extends._3advantage;

/**
 * 继承的优缺点
 * 练习：
 * 在一款游戏中，我们设计了三种类型的鸭子，这些鸭子有一些共同的属性，也有共同的行为，比如都可以叫，都会游泳等。
 * 编写程序，描述这些鸭子。
 * 后来，需求更改了，这些鸭子不能游泳了，但是都会飞，怎么改呢？
 * 再后来，需求又改了，新增了一种鸭子，但这个鸭子不会飞，又怎么办呢？
 *
 * 继承的本质是复用成员,一旦能够复用,就可以提升代码的扩展性程序的可维护性.
 * 当然继承的出现,也让引用数据类型出现了数据类型转换,继承还是多态的前提.
 *
 * 继承中子类会无条件得到父类的所有成员,子类是不能做出选择的.
 *
 *
 * @since 09:38
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        FirstTypeDuck ftd = new FirstTypeDuck();
        ftd.fly();

        ForthTypeDuck ftd2 = new ForthTypeDuck();
        ftd2.fly();
    }
}

class DuckFather {
    String name;
    int age;

    public void shout() {
        System.out.println("嘎嘎嘎嘎!");
    }

    /*public void swim() {
        System.out.println("白毛浮绿水!");
    }*/

    public void fly() {
        System.out.println("我要飞得更高!");
    }
}

class FirstTypeDuck extends DuckFather {
    // 独有的属性和行为
}

class SecondTypeDuck extends DuckFather {
    // 独有的属性和行为
}

class ThirdTypeDuck extends DuckFather {
    // 独有的属性和行为
}

class ForthTypeDuck extends DuckFather{

    // 使用方法的重写/覆盖修改继承自父类中的方法,但是修改归修改,继承还是要继承
    public void fly() {
        System.out.println("我不能飞,我只会跳舞!");
    }
}
